package com.advancedmods.amcore.core.mod.updater;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.spi.AbstractLogger;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
public class UpdateCheckThread extends Thread {
private final String _releaseUrl;
private final IUpdatableMod _mod;
private boolean _checkComplete = false;
private boolean _newVerAvailable = false;
private boolean _criticalUpdate = false;
private ModVersion _newVer;
public UpdateCheckThread(IUpdatableMod mod) {
this(mod, null);
}
public UpdateCheckThread(IUpdatableMod mod, String releaseUrl) {
super("AMUpdater:" + mod.getModId());
_mod = mod;
if (releaseUrl == null) {
releaseUrl = "https://raw.github.com/skyboy/" + mod.getModId() + "/master/VERSION";
}
_releaseUrl = releaseUrl;
}
@Override
public void run() {
l: try {
String id = _mod.getModName();
ModVersion ourVer = ModVersion.parse(id, _mod.getModVersion());
URL versionFile = new URL(_releaseUrl);
BufferedReader reader = new BufferedReader(new InputStreamReader(versionFile.openStream()));
ModVersion newVer = ModVersion.parse(id, reader.readLine());
ModVersion critVer = ModVersion.parse(id, reader.readLine());
reader.close();
if (newVer == null) {
break l;
}
_newVer = newVer;
_newVerAvailable = ourVer.compareTo(newVer) < 0;
if (_newVerAvailable) {
_mod.getLogger().info("An updated version of " + _mod.getModName() + " is available: " + newVer + ".");
if (ourVer.minecraftVersion().compareTo(newVer.minecraftVersion()) < 0) {
ReleaseVersion newv = newVer.minecraftVersion(), our = ourVer.minecraftVersion();
_newVerAvailable = newv.major() == our.major() && newv.minor() == our.minor();
}
if (critVer != null && ourVer.compareTo(critVer) >= 0) {
_criticalUpdate = Boolean.parseBoolean(critVer.description());
_criticalUpdate &= _newVerAvailable;
}
}
if (_criticalUpdate) {
_mod.getLogger().info("This update has been marked as CRITICAL and will ignore notification suppression.");
}
} catch (Exception e) {
Level level = Level.WARN;
String base = _mod.getClass().getPackage().getName();
int i = base.indexOf('.');
if (i > 0) {
base = base.substring(0, i);
}
if (base.equals("cofh") || base.equals("powercrystals") || base.equals("advancedmods")) {
level = Level.ERROR;
}
_mod.getLogger().log(level, AbstractLogger.CATCHING_MARKER, "Update check for " + _mod.getModName() + " failed.", e);
}
_checkComplete = true;
}
public boolean checkComplete() {
return _checkComplete;
}
public boolean isCriticalUpdate() {
return _criticalUpdate;
}
public boolean newVersionAvailable() {
return _newVerAvailable;
}
public ModVersion newVersion() {
return _newVer;
}
}